<?php
class ProductManager {
    public function getProductDetails($productId)
    {
        // 实现获取商品详情的逻辑
        return "Product details for ID: $productId";
    }
}

class OrderManager {
    public function createOrder($userId, $productIds)
    {
        // 实现创建订单的逻辑
        echo "Order created for user $userId with products: ". implode(',', $productIds);
    }
}

class UserManager {
    public function getUserInfo($userId)
    {
        // 实现获取用户信息的逻辑
        echo "User info for ID: $userId";
    }
}


class GoodsFacade
{
    private $userManager;
    private $orderManager;
    private $productManager;


    public function __construct()
    {
        $this->orderManager = new OrderManager();
        $this->productManager = new ProductManager();
        $this->userManager = new UserManager();
    }

    public function getProductDetailsAndUserInfo($productId, $userId) {
        $productDetails = $this->productManager->getProductDetails($productId);
        $userInfo = $this->userManager->getUserInfo($userId);
        return [$productDetails, $userInfo];
    }

    public function createOrderAndGetUserInfo($userId, $productIds) {
        $orderCreated = $this->orderManager->createOrder($userId, $productIds);
        $userInfo = $this->userManager->getUserInfo($userId);
        return [$orderCreated, $userInfo];
    }
}

(new GoodsFacade())->createOrderAndGetUserInfo("1",[1,2,3]);












/*
门面模式 例如，假设有一个电商系统，包括商品管理、订单管理和用户管理等子系统。我们可以创建一个门面类 EcommerceFacade 来处理一些常见的业务操作：
1. 明确门面的职责范围：门面应该只负责对相关子系统的操作进行合理的组合和封装，不要让它承担过多或不相关的职责，以免导致门面过于复杂。
2.保持门面接口的简洁性：门面提供给客户端的方法应该具有清晰的语义和简单的参数，让使用者能够轻松理解和使用。
3.避免在门面中实现过多的业务逻辑：主要的业务逻辑应该放在子系统中，门面只是协调和调用子系统的功能。
 */